package cn.hy.机考.part01;

import java.util.Scanner;

/**
 * @author zhaomu
 *
 * 四、找终点
 * 一个正整数数组设为 nums,最大为 100 个成员。求从第一个成员开始正好走到数组最后一个成员所使用的最小步骤数
 *  要求:
 *  1.第一步必须从第一元素起，且 1<=第一步步长<len/2 (len为数组长度)
 *  2.从第二步开始只能以所在成员的数字走相应的步数，不能多不能少，如果目标 不可达返回-1，只输出最小的步骤数量
 * 3.只能向数组的尾部走不能向回走
 *
 * 输入描述:有正整数数组，空格分割
 * 输出描述 :最小步数，不存在输出-1
 * 7 5 9 4 2 6 8 3 5 4 3 9
 * 2
 *
 * 1 2 3 7 1 5 9 3 2 1
 * -1
 */
public class Demo04 {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String[] strings = sc.nextLine().split(" ");
        int[] array = new int[strings.length];
        for (int i = 0; i < strings.length; i++) {
            array[i] = Integer.parseInt(strings[i]);
        }

        int dst = Integer.MAX_VALUE;
        // 计算第二步开始的最少步数达到终点
        for (int i = 1; i < array.length / 2; i++) {
            int d = getNumber(array, i);
            // 第一步任意，不受限制
            if (d != -1) {
                dst = Math.min(dst, d);
            }
        }

        dst = dst == Integer.MAX_VALUE ? -1 : dst;
        System.out.println(dst);
    }

    private static int getNumber(int[] array, int i) {
        int step = 1;
        while (i < array.length) {
            i += array[i]; // 第二步
            step++; // 步数加 +1
            if (i == array.length - 1) {
                return step;
            }

            if (i > array.length - 1) {
                return -1;
            }
        }

        return -1;
    }

}
